﻿using QldtSdh.GUI.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QldtSdh.DAL.Models;
using QldtSdh.BLL;
using QldtSdh.GUI.Utils;

namespace QldtSdh.GUI.DuLieu
{
    public partial class FormQuanLyKhoaHoc_BoSungNganhDaoTao : BaseDialog
    {
        KhoaHoc khoaHoc;
        KhoaHoc_NganhDaoTao knganh;
        bool allowUpdate = false;
        int countEntityToBeAdded = 0;
        public event Common.TListChangedEventHandler OnChanged;
        public FormQuanLyKhoaHoc_BoSungNganhDaoTao(KhoaHoc khoaHoc, KhoaHoc_NganhDaoTao knganh = null)
        {
            InitializeComponent();
            allowUpdate = false;
            this.khoaHoc = khoaHoc;
            this.knganh = knganh;
            lbTieuDe.Text = string.Format(lbTieuDe.Text, khoaHoc.TenKhoaHoc);
            if (LoadNganhDaoTao())
                LoadChuongTrinhDaoTao();
            if (knganh != null)
            {
                chkTiepTucBoSung.Visible = chkTiepTucBoSung.Enabled = false;
                cmbNganh.Enabled = false;
            }
            allowUpdate = true;
        }

        bool LoadNganhDaoTao()
        {
            var ls = BizChuyenNganhDaoTao.GetList();
            cmbNganh.DataSource = ls;
            cmbNganh.DisplayMember = "TenNganhDaoTao";
            cmbNganh.ValueMember = "MaNganhDaoTaoGUID";
            if (ls != null && ls.Count > 0)
            {
                if (knganh != null)
                    cmbNganh.SelectedValue = knganh.MaNganhDaoTaoGUID;
                return true;
            }
            else return false;
        }

        void LoadChuongTrinhDaoTao()
        {
            var current = cmbNganh.SelectedItem as NganhDaoTao;
            if (current != null)
            {
                lbMaNganh.Text = current.MaNganhDaoTao;
                cmbChuongTrinhDaoTao.DataSource = BizChuongTrinhDaoTao.GetList(current.MaNganhDaoTaoGUID);
                cmbChuongTrinhDaoTao.DisplayMember = "TenChuongTrinhDaoTao";
                cmbChuongTrinhDaoTao.ValueMember = "MaChuongTrinhDaoTaoGUID";
                if (knganh != null)
                    cmbChuongTrinhDaoTao.SelectedValue = knganh.MaChuongTrinhDaoTaoGUID;
            }
        }

        private void cmbNganh_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (allowUpdate)
            {
                lbMaNganh.Text = (cmbNganh.SelectedItem as NganhDaoTao).MaNganhDaoTao;
                LoadChuongTrinhDaoTao();
            }
        }

        bool ValidateData()
        {
            if (cmbNganh.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbNganh, "Bạn chưa chọn ngành");
                cmbNganh.Focus();
                return false;
            }
            if (cmbChuongTrinhDaoTao.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbChuongTrinhDaoTao, "Bạn chưa chọn chương trình đào tạo");
                cmbChuongTrinhDaoTao.Focus();
                return false;
            }
            return true;
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                if (knganh != null)
                {
                    knganh.MaKhoaHocGUID = khoaHoc.MaKhoaHocGUID;
                    knganh.MaNganhDaoTaoGUID = cmbNganh.SelectedValue.ToString();
                    knganh.MaChuongTrinhDaoTaoGUID = cmbChuongTrinhDaoTao.SelectedValue.ToString();
                    var rs = BizKhoaHoc_NganhDaoTao.Update(knganh);
                    if (rs == CODE_RESULT_RETURN.ThanhCong)
                    {
                        this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    }
                    else if (rs == CODE_RESULT_RETURN.MaTrung)
                    {
                        DialogUtils.ShowError("Ngành học và chương trình đào tạo này đã được tạo trong khóa này");
                    }
                }
                else
                {
                    KhoaHoc_NganhDaoTao khndt = new KhoaHoc_NganhDaoTao();
                    khndt.MaKhoaHocGUID = khoaHoc.MaKhoaHocGUID;
                    khndt.MaNganhDaoTaoGUID = cmbNganh.SelectedValue.ToString();
                    khndt.MaChuongTrinhDaoTaoGUID = cmbChuongTrinhDaoTao.SelectedValue.ToString();
                    var rs = BizKhoaHoc_NganhDaoTao.Add(khndt);
                    if (rs == CODE_RESULT_RETURN.ThanhCong)
                    {
                        countEntityToBeAdded++;
                        OnChanged(this, null);
                        if (chkTiepTucBoSung.Checked)
                        {
                            cmbNganh.Focus();
                            DialogUtils.ShowMessage(string.Format("Đã thêm thành công ngành học: {0} vào khóa: {1}",cmbNganh.SelectedText.ToString(),khoaHoc.TenKhoaHoc));
                        }
                        else
                        {
                            this.DialogResult = System.Windows.Forms.DialogResult.OK;
                        }
                    }
                    else if (rs == CODE_RESULT_RETURN.MaTrung)
                    {
                        DialogUtils.ShowError("Ngành học và chương trình đào tạo này đã được tạo trong khóa: " + khoaHoc.TenKhoaHoc);
                    }
                }
            }
        }

        private void FormQuanLyKhoaHoc_BoSungNganhDaoTao_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (countEntityToBeAdded > 0)
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }
    }
}
